//
//  SYTabBar.swift
//  仿微博
//
//  Created by a。 on 16/9/19.
//  Copyright © 2016年 a。. All rights reserved.
//

import UIKit

//指定协议
protocol SYTabBarDelegate : NSObjectProtocol {
    func didSelectedComposeButton()
}
//MARK: -自定义tabbar
class SYTabBar: UITabBar {
    
    
    //  点击撰写按钮执行的闭包
    var composeButtonClosure:(() -> ())?
    //  使用weak关键那么协议必须要继承NSObjectProtocol
    //设置代理属性
    weak var syDelegate: SYTabBarDelegate?
    
    
    //  MARK: --懒加载 中间的 加号按钮只有tabbar 持有 所以 用private修饰
    private lazy var composeButton: UIButton = {
        
        let button = UIButton()
        
        button.addTarget(self, action: #selector(composeButtonAction), for: .touchUpInside)
        //MARK: -设置按钮的图片
        button.setImage(UIImage(named :"tabbar_compose_icon_add"), for: .normal)
        button.setImage(UIImage(named :"tabbar_compose_icon_add_highlighted"), for:.highlighted)
        
        
        //MARK: -设置按钮的背景图片
        
        button.setBackgroundImage(UIImage(named :"tabbar_compose_button"), for: .normal)
        button.setBackgroundImage(UIImage(named :"tabbar_compose_button_highlighted"), for: .highlighted)
        
        //button自适应大小
        button.sizeToFit()
        return button
    }()
    //  表示使用手写代码去创建对象
    override init(frame: CGRect) {
        super.init(frame: frame)
        
        setupUI()
    }
    //  使用xib或者storyboard创建对象的时候会调用该方法, 提示为不支持xib创建
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
        setupUI()
    }
    
    
    private func setupUI() {
        //给tabbar设置个背景图片，防止pop的时候导航栏会出现黑色边框的效果，或者给window设置个背景颜色
        
        backgroundImage = UIImage(named:"tabbar_background")
        addSubview(composeButton)
    }
    
    override func layoutSubviews() {
        super.layoutSubviews()
        //设置加号按钮的中心点
        composeButton.centerX = width / 2
        composeButton.centerY = height / 2
        
        
        //  计算每项按钮的宽度
        let itemWidth = width / 5
        
        //记录按钮的索引
        var index : Int = 0
        
        //遍历tabbar 里面的子控件
        for value in subviews {
            
            if value .isKind(of: NSClassFromString("UITabBarButton")!){
                
                value.x = CGFloat(index) * itemWidth
                index += 1
                
                if index == 2 {
                    index += 1
                }
            }
        }
        
        
    }
    
    //点击按钮需 通知 maintabbar需要执行什么操作 需要通过闭包或者代理传递消息给控制器
    @objc  func composeButtonAction() {
        //        print("xxx")
        composeButtonClosure?()
        //  ? 表示判断前面的对象是否为nil,如果为nil那么后面的代码就不执行,否则执行后面的代码
        //类似于oc中的判断代理能不能响应此方法
        syDelegate?.didSelectedComposeButton()
        
    }
    
    
    
}
